package com.top.jwtdemo.utils;

import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONObject;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;

import java.util.Date;

/**
 * @author  Cjj
 * @data    2024/6/17 13:11
 * @blog    Token工具类
 */
public class TokenUtil {
    //定义的常量
    private final static String ENCRYRT_KEY="abc123";
    //过期时间
    private final static int EXPIRE_TIME=30;
    private final static String ISSUER="cheng";

    //定义一个静态方法产生Token

    /**
     * 生成     token
     * @param   jsonObject 要封装到 token 中的内容,如果需要传递多个值,可以定义为Map或者JSON
     * @return 返回 token
     */
    public static String createToken(JSONObject jsonObject){
        return JWT.create()
                .withSubject(jsonObject.toString())
                .withIssuer(ISSUER)
                .withExpiresAt(DateUtil.offsetMinute(new Date(),EXPIRE_TIME))
                .withClaim("test","123")
                .sign(Algorithm.HMAC256(ENCRYRT_KEY));
    }

    /**
     * 校验Token
     */
     public static boolean verifyToken(String token){
         try {
             JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(ENCRYRT_KEY)).withIssuer(ISSUER).build();
             jwtVerifier.verify(token);
             return true;
         } catch (Exception e) {
             e.printStackTrace();
             return false;
         }
     }

}
